import axios from "axios";
import {Message,Loading} from 'element-ui'
import store from "@/store";
import router from "@/router";

const instance = axios.create({
  baseURL: '/api',
  timeout: 5000,
  headers: {

  }
});

//请求加载
let loadingInstance = null

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  //请求加载效果
   loadingInstance = Loading.service({
    lock: true,
    text: '加载中',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  })

  //获取token并存储再vuex中
  const token =  store.getters["user/token"] || ''
  if (token) {
    config.headers['token-user'] = token
  }

  return config;
}, function (error) {
    //关闭loading加载
    loadingInstance.close()
  // 对请求错误做些什么
  return Promise.reject(error);
});


// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  //关闭loading加载
  loadingInstance.close()
  const data = response.data;

  // 2xx 范围内  code为0 的状态码都会触发该函数。
  if (data.code !== 1 ) {
    return Promise.reject(data.msg);
  }
  // 对响应数据做点什么
  return response;
}, function (error) {
  //关闭loading加载
  loadingInstance.close()

  // 超出 2xx 范围的状态码都会触发该函数。
  //登录错误
  if (error.status === 406) {
    store.commit('user/removeInfo')
    router.push('/').catch(() => {
      if (error.name !== 'NavigationDuplicated') {
        console.log(error) // 非重复导航错误才打印
      }
    })

    return alert("请重新登录",'error')
  }
  return Promise.reject(error);
  // 对响应错误做点什么

});

/**
 * 消息设置
 */
function alert(message,type){
  Message({
    message: message,
    type: type,
    center: true
  })
}

export default instance
